<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数拥有多个长辈</title>
</head>
<body>
    
</body>
<script>
    /*
        函数在JS中的身份比较特殊，他又两个身份，第一个时可以作为一个方法函数来使用  第二时可以作为构造函数来初始化实例化对象来使用
            所以函数其实是由两个实例对象的
    */
    function city(params) {
        
    }
    console.dir(city)
    // 分别有两个原型 ： __proto__ 和 prototype
    city.__proto__.show=function(){
        console.log('hhh')
    }
    city.prototype.gets= function(){
        console.log('helli')
    }
    city.show() //hhh
    city.gets()  //city.gets is not a function   
    // 可见 当函数当作对象来使用的时候 是没有方法访问到prototype原型里面的方法的
    let City = new city()
    City.gets()  //helli
    City.show()  //City.show is not a function

    /*
        从以上的例子就可以看出差别了  两个原型是分别给函数的两种分身来使用的
            函数是普通对象的身份的时候  可以访问到__proto__原型上的方法  但是不能访问到prototype原型的数据
            函数是以构造函数的身份出现的时候  他new出来的对象是可以方法prototype原型上的数据  但是访问不到__proto__里面的数据   
    */
</script>
</html>